#ifndef QLSPLUGINSMANAGERTABLEWIDGET_H
#define QLSPLUGINSMANAGERTABLEWIDGET_H

#include <QList>
#include <QPoint>

#include <QWidget>

#include <plugins_manager_appfwk/qls_plugin_widget.h>

/* 插件位置信息 */
class QLS_PLUGINS_MANAGER_APPFWK_EXPORT PluginInfoPos
{
public:
    PluginInfo m_pluginInfo; /* 插件信息 */
    QPoint m_pos;            /* 位置 */

    PluginInfoPos();
    PluginInfoPos(PluginInfo pluginInfo, QPoint pos);
    bool operator==(const PluginInfoPos &other);
};

namespace Ui {
class QLS_PLUGINS_MANAGER_APPFWK_EXPORT QLsPluginsManagerTableWidget;
}

class QLS_PLUGINS_MANAGER_APPFWK_EXPORT QLsPluginsManagerTableWidget : public QWidget
{
    Q_OBJECT

public:
    explicit QLsPluginsManagerTableWidget(QWidget *parent = nullptr);
    ~QLsPluginsManagerTableWidget();

    /* 添加插件界面 */
    void AddPluginWidget(const PluginInfo &pluginInfo);
    /* 删除插件界面 */
    void DeletePluginWidget(const PluginInfo &pluginInfo);

    /* 是否显示插件管理器界面 */
    bool isShowPluginsManagerWidget() const;
    void setIsShowPluginsManagerWidget(bool isShowPluginsManagerWidget);

signals:
    /* 转发所有插件的加载信号 */
    void sigLoad(PluginInfo &);

public slots:
    /* 加载结果的槽函数 */
    void slotLoadRes(PluginInfo &pluginInfo);

private slots:
    /* 转发所有插件的加载信号的槽函数 */
    void slotLoad(PluginInfo &pluginInfo);

private:
    /* 获取当前表格靠前的空格(未添加或被删除导致的空格)位置 */
    QPoint GetSpacePos();
    /* 是否已存在该插件 */
    bool IsAlreadyExisted(const PluginInfo &pluginInfo);

private:
    Ui::QLsPluginsManagerTableWidget *ui;

    bool m_isShowPluginsManagerWidget; /* 是否显示插件管理器界面 */

    QList<PluginInfoPos> m_pluginInfoPosList; /* 插件数据列表 */
};

#endif // QLSPLUGINSMANAGERTABLEWIDGET_H
